/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package src.枚举类;



/**
 * @description 枚举类
 *  类的对象只有 有 限 个 ，确 定 的 。举例如下：
 *   星期：Monday(星期一)、......、Sunday(星期天)
 *   性别：Man(男)、Woman(女)
 *   季节：Spring(春节)......Winter(冬天)
 *   支付方式：Cash（现金）、WeChatPay（微信）、Alipay(支付宝)、BankCard(银
 *      行卡)、CreditCard(信用卡)
 *   就职状态：Busy、Free、Vocation、Dimission
 *   订单状态：Nonpayment（未付款）、Paid（已付款）、Delivered（已发货）、
 *      Return（退货）、Checked（已确认）Fulfilled（已配货）、
 *   线程状态：创建、就绪、运行、阻塞、死亡
 *
 *  当需要定义一组常量时，强烈建议使用枚举类
 *
 * 枚举类的实现
 *  JDK1.5之前需要自定义枚举类
 *  JDK 1.5 新增的 enum 关键字用于定义枚举类
 * 若枚举只有一个对象, 则可以作为一种单例模式的实现方
 *      式。
 *  枚举类的属性
 *  枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
 *  枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
 *  若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的
 *      传入参数
 * @author 俊昭
 * @date 2022/4/18
*/
public class SeasonTest {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.WINTER);
        System.out.println(Season.WINTER.getName());
    }
}
class Season{
    // 属性 private final 修饰
    private final String Name;
    private final String Desc;

    // 私有化构造器
    private Season(String name, String desc) {
        Name = name;
        Desc = desc;
    }
    // 提供对象 设置为public static final
    public static final Season SPRING = new Season("春天","万物复苏");
    public static final Season SUMMER = new Season("夏天","烈日炎炎");
    public static final Season AUTUMN = new Season("球天","橙黄橘绿");
    public static final Season WINTER = new Season("冬天","万籁俱寂");

    public String getName() {
        return Name;
    }

    @Override
    public String toString() {
        return "季节:" + Name  +
                ",描述:" + Desc ;
    }
}